In a simple computer system environment, a computer application or program may execute on a single computer independently of other computers or supporting services, such as database instances.
While simple computer systems of the type described above may have been the norm at one time, the current norm may be characterized as a much more complex environment in which a computer application, while nominally executing on a local system, actually has one or more run-time dependencies on other supporting computer systems. The term run-time dependency means that one service cannot continue execution of its application without interaction with another service. In a complex environment, an application may also have indirect run-time dependencies since one or more of the services it depends on may, in turn, require other run-time services.
The fact that a computer application may have a chain of dependencies stretching across several tiers of computer systems becomes significant where one or more of the supported systems can elect to receive the support it needs from one of several of the supporting systems.
A good example of that type of system is a web application. One common deployment topology for a web application is a load balancer in front of a tier of http proxies in front of a tier of web application servers which use data from a database server and credentials from a LDAP server. Where multiple servers are available to provide a service, those servers are sometimes referred to collectively as a cluster.
Protocol load-balancing devices, called load balancers, distribute work to be performed among multiple applications as identified by network address. A load balancer multiplexes client requests among a set of back-end server daemons transparently to the client. Load balancing improves application scalability by permitting multiple computer systems to provide a single service. Load balancing also provides fault tolerance by redirecting work that previously had been done by a failed computer system.
A load balancer is typically considered to be a virtual service that is bound to a number of real services (processes or programs or applications) running on real servers. When dealing with a client request, the load balancer forwards the request to one of the real servers which provides the service required by the client request.
How well a particular server in a cluster is performing is often referred to as the “health” of the server. Some metrics often used to measure server health include the amount of time it takes for the application daemon to respond to a request, the memory usage of the server operating system or application daemon, and the CPU usage of the system or the server daemon. Also, some application daemons may not be expected to perform as well as others if the capacity (memory or CPU) available to the underlying operating system is less.
Even though the health or capacity of a server may be important, some load balancers don't even attempt to assess these, operating on the sometimes-unfounded assumption that all of the servers in a server cluster are exhibiting the same level of performance.
Other load balancers attempt to monitor the health of a server either by sending periodic queries to the server or by installing an agent on the server that monitors operations performed by hardware and software resources of the server and periodically reports the results back to the load balancer.
Knowing how well the hardware and software resources of a particular server are performing may not be enough to allow a load balancer to make an optimal decision whether or not to choose that server. The server's performance at a given time is going to depend not only on its own “local” hardware and software resources but also on the performance of still other servers on which the given server is itself directly or indirectly dependent. In some situations, the supporting servers may themselves be members of a server cluster and may have their own chain of dependencies. The greater the number of tiers or steps between the load balancer and a set of subordinate servers, the less likely it is that the load balancer will have adequate information about the subordinate servers.